# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# D7Cl0ud360
# 邮箱: 18656042877@163.com
# 作者：'sugar'
# 公司网址： http://www.dtcloud360.com/
# Copyright 中亿丰信息科技(苏州)有限公司
# 日期：2023/10/8 16:02
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
from dtcloud import models
from dtcloud.http import request, SessionExpiredException
from dtcloud.exceptions import AccessDenied


class PermitIrHttp(models.AbstractModel):
    _inherit = 'ir.http'

    @classmethod
    def _pre_dispatch(cls, rule, args):
        super()._pre_dispatch(rule, args)

        permit = rule.endpoint.original_routing.get('permit', None)
        if request.uid:
            user = request.env['res.users'].sudo().browse(request.uid)
            if not user or not user.status:
                raise SessionExpiredException('你的账号异常!')
        # 请求接口权限验证
        if permit:
            if not request.env['res.users'].sudo().browse(request.uid).has_perm(rule.rule, request.httprequest.method):
                raise AccessDenied('用户没有该权限，请联系管理员!')
